package study_class;

/**
 * @program: rocsun
 * @description:
 * @author: yx.guo
 * @create: 2025-08-05 21:18
 **/
public class Singleton {

    // 第一步：volatile关键修饰(防止指令重排序)
    private static volatile Singleton instance;
    // 第二步：私有化构造方法
    private Singleton() {}
    // 第三步：双检锁
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                    // 若 instance 不加 volatile，可能发生指令重排序：
                    // 1. 分配内存 → 2. 实例化对象 → 3. 赋值给 instance
                    // 重排序后可能变为 1→3→2，导致其他线程拿到未初始化的对象
                }
            }
        }
        return instance;
    }
}
